home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / dom / DOMUtilities.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  15.4 KB  |  825 lines

  1. package com.extensibility.dom;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.util.StringUtilities;
  5. import com.extensibility.xml.SXE;
  6. import com.extensibility.xml.Schema;
  7. import com.extensibility.xml.SchemaIntf;
  8. import com.extensibility.xml.SchemaSpace;
  9. import com.extensibility.xml.SchemaUtilities;
  10. import com.extensibility.xml.URI;
  11. import com.extensibility.xml.URIResolver;
  12. import com.extensibility.xml.XMLTypeRef;
  13. import java.io.EOFException;
  14. import java.io.IOException;
  15. import java.io.StringWriter;
  16. import java.io.Writer;
  17. import org.w3c.dom.Attr;
  18. import org.w3c.dom.CDATASection;
  19. import org.w3c.dom.Comment;
  20. import org.w3c.dom.Document;
  21. import org.w3c.dom.DocumentType;
  22. import org.w3c.dom.Element;
  23. import org.w3c.dom.EntityReference;
  24. import org.w3c.dom.NamedNodeMap;
  25. import org.w3c.dom.Node;
  26. import org.w3c.dom.NodeList;
  27. import org.w3c.dom.ProcessingInstruction;
  28. import org.w3c.dom.Text;
  29.  
  30. public class DOMUtilities {
  31.    public static final Object[] getSchemaInfo(Document var0, URI var1) throws IOException {
  32.       Object var2 = null;
  33.       String var4 = null;
  34.       if (var0 == null) {
  35.          return null;
  36.       } else {
  37.          URI var3 = getDTD(var0, var1);
  38.          if (var3 != null) {
  39.             var4 = SchemaIntf.DTD_FLAVOR_NAME;
  40.          }
  41.  
  42.          if (var3 == null) {
  43.             var3 = getSOX(var0, var1);
  44.             if (var3 != null) {
  45.                var4 = SchemaIntf.SOX2_FLAVOR_NAME;
  46.             }
  47.          }
  48.  
  49.          if (var3 == null) {
  50.             var3 = getXDR(var0, var1);
  51.             if (var3 != null) {
  52.                var4 = SchemaIntf.XDR_FLAVOR_NAME;
  53.             }
  54.          }
  55.  
  56.          if (var3 == null) {
  57.             String var5 = getNodeNamespace(var0.getDocumentElement(), (Node)null, (String)null);
  58.             if (var5 != null) {
  59.                var3 = new URI(var1, var5);
  60.                var4 = SchemaUtilities.getFlavorPeek(var3);
  61.             }
  62.          }
  63.  
  64.          return new Object[]{var3, var4};
  65.       }
  66.    }
  67.  
  68.    public static URI getSchemaURI(Document var0, URI var1) throws IOException {
  69.       Object[] var2 = getSchemaInfo(var0, var1);
  70.       return var2 == null ? null : (URI)var2[0];
  71.    }
  72.  
  73.    public static String getSchemaFlavor(Document var0, URI var1) throws IOException {
  74.       Object[] var2 = getSchemaInfo(var0, var1);
  75.       return var2 == null ? null : (String)var2[1];
  76.    }
  77.  
  78.    public static final SchemaIntf getSchema(Document var0, URI var1) throws Exception {
  79.       Object[] var2 = getSchemaInfo(var0, var1);
  80.       if (var2 == null) {
  81.          return null;
  82.       } else {
  83.          URI var3 = (URI)var2[0];
  84.          String var4 = (String)var2[1];
  85.          if (var3 != null && SchemaUtilities.isValidFlavor(var4)) {
  86.             Schema var5 = new Schema(var3, var4);
  87.             if (var5.getFlavor() != null && SchemaUtilities.isValidFlavor(var5.getFlavor().getFlavorName())) {
  88.                var5.parse(var3, 0, (Object)null);
  89.                return var5;
  90.             } else {
  91.                return null;
  92.             }
  93.          } else {
  94.             return null;
  95.          }
  96.       }
  97.    }
  98.  
  99.    public static final URI getDTD(Document var0, URI var1) {
  100.       return SchemaUtilities.getExternalDTD(var1);
  101.    }
  102.  
  103.    public static final URI getSOX(Document var0, URI var1) {
  104.       String var2 = null;
  105.       NodeList var3 = var0.getChildNodes();
  106.  
  107.       for(int var4 = 0; var4 < var3.getLength(); ++var4) {
  108.          Node var5 = var3.item(var4);
  109.          if (var5.getNodeType() == 7) {
  110.             ProcessingInstruction var6 = (ProcessingInstruction)var5;
  111.             if (var6.getTarget() == "soxtype") {
  112.                var2 = var6.getData();
  113.             }
  114.          }
  115.       }
  116.  
  117.       if (var2 == null) {
  118.          return null;
  119.       } else {
  120.          int var7 = var2.indexOf(36);
  121.          if (var7 >= 0) {
  122.             var2 = var2.substring(0, var7);
  123.          }
  124.  
  125.          return new URI(var1, var2);
  126.       }
  127.    }
  128.  
  129.    public static final URI getXDR(Document var0, URI var1) {
  130.       String var2 = getDefaultNamespace(var0);
  131.       if (var2 != null && var2.indexOf("x-schema:") == 0) {
  132.          var2 = var2.substring((new String("x-schema:")).length());
  133.          return new URI(var1, var2);
  134.       } else {
  135.          return null;
  136.       }
  137.    }
  138.  
  139.    public static final URI getXSD(Document var0, URI var1) {
  140.       String var2 = getDefaultNamespace(var0);
  141.       return var2 == null ? null : new URI(var1, var2);
  142.    }
  143.  
  144.    public static String getDefaultNamespace(Document var0) {
  145.       Element var1 = var0.getDocumentElement();
  146.       NamedNodeMap var2 = var1.getAttributes();
  147.       if (var2 == null) {
  148.          return null;
  149.       } else {
  150.          Node var3 = var2.getNamedItem("xmlns");
  151.          return var3 == null ? null : var3.getNodeValue();
  152.       }
  153.    }
  154.  
  155.    public static String getFirstNamespace(Document var0) {
  156.       Element var1 = var0.getDocumentElement();
  157.       NamedNodeMap var2 = var1.getAttributes();
  158.       if (var2 == null) {
  159.          return null;
  160.       } else {
  161.          for(int var3 = 0; var3 < var2.getLength(); ++var3) {
  162.             Node var4 = var2.item(var3);
  163.             String var5 = var4.getNodeName();
  164.             if (!var5.equals("xmlns") && var5.startsWith("xmlns:")) {
  165.                return var4.getNodeValue();
  166.             }
  167.          }
  168.  
  169.          return null;
  170.       }
  171.    }
  172.  
  173.    public static boolean isLongerThan(Node var0, int var1) {
  174.       return true;
  175.    }
  176.  
  177.    public static String getAsString(Node var0) {
  178.       return getAsString(var0, false);
  179.    }
  180.  
  181.    public static String getAsString(Node var0, boolean var1) {
  182.       StringWriter var2 = new StringWriter();
  183.  
  184.       try {
  185.          writeNode(var2, var0, var1);
  186.       } catch (IOException var5) {
  187.          String var4 = ((Throwable)var5).getMessage();
  188.          return var4;
  189.       }
  190.  
  191.       return var2.toString();
  192.    }
  193.  
  194.    public static String getAsString(Node var0, boolean var1, int var2) {
  195.       FiniteWriter var3 = new FiniteWriter(new StringWriter(), var2);
  196.  
  197.       try {
  198.          writeNode(var3, var0, var1);
  199.       } catch (EOFException var6) {
  200.       } catch (IOException var7) {
  201.          String var5 = ((Throwable)var7).getMessage();
  202.          return var5;
  203.       }
  204.  
  205.       return var3.toString();
  206.    }
  207.  
  208.    public static void removeChildrenOfType(Node var0, int var1) {
  209.       NodeList var2 = var0.getChildNodes();
  210.  
  211.       for(int var3 = var2.getLength() - 1; var3 >= 0; --var3) {
  212.          if (var2.item(var3).getNodeType() == var1) {
  213.             var0.removeChild(var2.item(var3));
  214.          }
  215.       }
  216.  
  217.    }
  218.  
  219.    public static void setText(Node var0, String var1) {
  220.       if (var0.getNodeType() == 1) {
  221.          removeChildrenOfType(var0, 3);
  222.          Text var2 = var0.getOwnerDocument().createTextNode(var1);
  223.          var0.insertBefore(var2, (Node)null);
  224.       } else {
  225.          var0.setNodeValue(var1);
  226.       }
  227.  
  228.    }
  229.  
  230.    public static String getText(Node var0) {
  231.       if (var0.getNodeType() == 1) {
  232.          StringWriter var1 = new StringWriter();
  233.  
  234.          try {
  235.             NodeList var2 = var0.getChildNodes();
  236.  
  237.             for(int var5 = 0; var5 < var2.getLength(); ++var5) {
  238.                writeNode(var1, var2.item(var5), false);
  239.             }
  240.          } catch (IOException var4) {
  241.             String var3 = ((Throwable)var4).getMessage();
  242.             return var3;
  243.          }
  244.  
  245.          return var1.toString();
  246.       } else {
  247.          return var0.getNodeValue();
  248.       }
  249.    }
  250.  
  251.    public static String getTextValue(Node var0, SchemaIntf var1) {
  252.       StringWriter var2 = new StringWriter();
  253.  
  254.       try {
  255.          if (var0.getNodeType() == 1) {
  256.             NodeList var3 = var0.getChildNodes();
  257.  
  258.             for(int var6 = 0; var6 < var3.getLength(); ++var6) {
  259.                writeNodeTextValue(var2, var3.item(var6), var1);
  260.             }
  261.          } else {
  262.             writeNodeTextValue(var2, var0, var1);
  263.          }
  264.       } catch (IOException var5) {
  265.          String var4 = ((Throwable)var5).getMessage();
  266.          return var4;
  267.       }
  268.  
  269.       return var2.toString();
  270.    }
  271.  
  272.    public static boolean setSchema(Document var0, SchemaIntf var1) {
  273.       if (var1 == null) {
  274.          return false;
  275.       } else {
  276.          boolean var2 = false;
  277.          URI var3 = var1.getURI();
  278.          if (var1.getFlavorName() != SchemaIntf.DTD_FLAVOR_NAME) {
  279.             if (var1.getFlavorName() != SchemaIntf.XDR_FLAVOR_NAME && var1.getFlavorName() != SchemaIntf.BIZ_FLAVOR_NAME && var1.getFlavorName() != SchemaIntf.OSC_FLAVOR_NAME) {
  280.                if (SchemaUtilities.flavorConvertsTo(var1.getFlavorName()) == "xsd") {
  281.                   Element var6 = var0.getDocumentElement();
  282.                   Attr var10 = (Attr)var6.getAttributes().getNamedItem("xmlns");
  283.                   if (var10 == null) {
  284.                      var6.setAttribute("xmlns", var3.getFullName());
  285.                      var2 = true;
  286.                   } else {
  287.                      var2 = var10.getNodeValue() == null || !var10.getNodeValue().equals(var3.getFullName());
  288.                      var10.setNodeValue(var3.getFullName());
  289.                   }
  290.                } else if (var1.getFlavorName() == SchemaIntf.SOX2_FLAVOR_NAME) {
  291.                   ProcessingInstruction var7 = getSoxPI(var0);
  292.                   if (var7 == null) {
  293.                      var7 = var0.createProcessingInstruction("soxtype", var3.getFullName());
  294.                      var0.insertBefore(var7, var0.getFirstChild());
  295.                      var2 = true;
  296.                   }
  297.                }
  298.             } else {
  299.                Element var4 = var0.getDocumentElement();
  300.                Attr var5 = (Attr)var4.getAttributes().getNamedItem("xmlns");
  301.                if (var5 == null) {
  302.                   var5 = var0.createAttribute("xmlns");
  303.                   var4.setAttributeNode(var5);
  304.                }
  305.  
  306.                var2 = var5.getNodeValue() == null || !var5.getNodeValue().equals(String.valueOf("x-schema:").concat(String.valueOf(var3.getFullName())));
  307.                var5.setNodeValue(String.valueOf("x-schema:").concat(String.valueOf(var3.getFullName())));
  308.             }
  309.          }
  310.  
  311.          if (var1.getFlavorName() != SchemaIntf.SOX2_FLAVOR_NAME) {
  312.             ProcessingInstruction var9 = getSoxPI(var0);
  313.             if (var9 != null) {
  314.                var9.getParentNode().removeChild(var9);
  315.                var2 = true;
  316.             }
  317.          }
  318.  
  319.          if (var1.getFlavorName() != SchemaIntf.DTD_FLAVOR_NAME) {
  320.          }
  321.  
  322.          if (var1.getFlavorName() != "xsd") {
  323.          }
  324.  
  325.          return var2;
  326.       }
  327.    }
  328.  
  329.    public static void writeDocument(Writer var0, Document var1, SchemaIntf var2, String var3, String var4, String var5) throws IOException {
  330.       Object var6 = null;
  331.       if (var2 != null) {
  332.          setSchema(var1, var2);
  333.       }
  334.  
  335.       writeDocument(var0, var1, var3, var4, var5);
  336.    }
  337.  
  338.    static ProcessingInstruction getSoxPI(Document var0) {
  339.       NodeList var1 = var0.getChildNodes();
  340.  
  341.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  342.          Node var3 = var1.item(var2);
  343.          if (var3.getNodeType() == 7) {
  344.             ProcessingInstruction var4 = (ProcessingInstruction)var3;
  345.             if (var4.getTarget().equals("soxtype")) {
  346.                return var4;
  347.             }
  348.          }
  349.       }
  350.  
  351.       return null;
  352.    }
  353.  
  354.    public static void writeDocument(Writer var0, Document var1, String var2, String var3, String var4) throws IOException {
  355.       SXE var5 = new SXE(var0);
  356.       var5.writeHeader("1.0", var2);
  357.       if (var3 != null || var4 != null) {
  358.          var5.writeDocTypeWithInternal(var1.getDocumentElement().getNodeName(), var3, var4);
  359.       }
  360.  
  361.       writeNode(var5, var1, -1);
  362.       var5.flush();
  363.    }
  364.  
  365.    public static void writeNode(Writer var0, Node var1, boolean var2) throws IOException {
  366.       SXE var3 = new SXE(var0);
  367.       if (var2) {
  368.          for(Node var4 = var1.getFirstChild(); var4 != null; var4 = var4.getNextSibling()) {
  369.             writeNode(var3, var4, 0);
  370.          }
  371.       } else {
  372.          writeNode(var3, var1, 0);
  373.       }
  374.  
  375.       var3.flush();
  376.    }
  377.  
  378.    public static void writeNode(SXE var0, Node var1, int var2) throws IOException {
  379.       switch (var1.getNodeType()) {
  380.          case 1:
  381.             var0.writeElem(var1.getNodeName(), -1);
  382.             NamedNodeMap var8 = var1.getAttributes();
  383.  
  384.             for(int var4 = 0; var4 < var8.getLength(); ++var4) {
  385.                Attr var5 = (Attr)var8.item(var4);
  386.                var0.writeAttr(var5.getName(), var5.getValue());
  387.             }
  388.  
  389.             for(Node var10 = var1.getFirstChild(); var10 != null; var10 = var10.getNextSibling()) {
  390.                writeNode(var0, var10, var2 + 1);
  391.             }
  392.  
  393.             var0.flush(var1.getNodeName());
  394.             break;
  395.          case 2:
  396.          case 6:
  397.          case 9:
  398.          default:
  399.             for(Node var9 = var1.getFirstChild(); var9 != null; var9 = var9.getNextSibling()) {
  400.                writeNode(var0, var9, var2 + 1);
  401.             }
  402.             break;
  403.          case 3:
  404.             String var7 = StringUtilities.trimControlChars(var1.getNodeValue());
  405.             if (var7.length() > 0) {
  406.                var0.writeText(var7);
  407.             }
  408.             break;
  409.          case 4:
  410.             var0.writeCDATA(var1.getNodeValue());
  411.             break;
  412.          case 5:
  413.             var0.writeEntityRef(var1.getNodeName());
  414.             break;
  415.          case 7:
  416.             ProcessingInstruction var6 = (ProcessingInstruction)var1;
  417.             var0.writePI(var6.getTarget(), var6.getData());
  418.             break;
  419.          case 8:
  420.             var0.writeComment(var1.getNodeValue(), true);
  421.             break;
  422.          case 10:
  423.             DocumentType var3 = (DocumentType)var1;
  424.       }
  425.  
  426.    }
  427.  
  428.    public static void writeNodeTextValue(Writer var0, Node var1, SchemaIntf var2) throws IOException {
  429.       switch (var1.getNodeType()) {
  430.          case 3:
  431.          case 4:
  432.             String var4 = StringUtilities.trimControlChars(var1.getNodeValue());
  433.             if (var4.length() > 0) {
  434.                var0.write(var4);
  435.             }
  436.             break;
  437.          case 5:
  438.             String var3 = var1.getNodeName();
  439.             var0.write(var3);
  440.       }
  441.  
  442.    }
  443.  
  444.    public static int getNodeIndex(Node var0, Node var1) {
  445.       if (var1.getNodeType() == 2) {
  446.          NamedNodeMap var2 = var0.getAttributes();
  447.          int var3 = var2.getLength();
  448.  
  449.          for(int var4 = 0; var4 < var3; ++var4) {
  450.             if (var1 == var2.item(var4)) {
  451.                return var4;
  452.             }
  453.          }
  454.       } else {
  455.          int var5 = 0;
  456.  
  457.          for(Node var6 = var0.getFirstChild(); var6 != null; var6 = var6.getNextSibling()) {
  458.             if (var1 == var6) {
  459.                return var5;
  460.             }
  461.  
  462.             ++var5;
  463.          }
  464.       }
  465.  
  466.       Debug.assert(false, "node not found");
  467.       return -1;
  468.    }
  469.  
  470.    public static Node getChild(Node var0, int var1) {
  471.       Node var2;
  472.       for(var2 = var0.getFirstChild(); var1 > 0; --var1) {
  473.          Debug.assert(var2 != null);
  474.          var2 = var2.getNextSibling();
  475.       }
  476.  
  477.       return var2;
  478.    }
  479.  
  480.    public static int getChildCount(Node var0) {
  481.       int var1 = 0;
  482.  
  483.       for(Node var2 = var0.getFirstChild(); var2 != null; var2 = var2.getNextSibling()) {
  484.          ++var1;
  485.       }
  486.  
  487.       return var1;
  488.    }
  489.  
  490.    public static void removeChildren(Node var0) {
  491.       NamedNodeMap var1 = var0.getAttributes();
  492.  
  493.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  494.          Node var3 = var1.item(var2);
  495.          if (var0 instanceof Element) {
  496.             ((Element)var0).removeAttributeNode((Attr)var3);
  497.          }
  498.       }
  499.  
  500.       for(Node var4 = var0.getFirstChild(); var4 != null; var4 = var0.getFirstChild()) {
  501.          var0.removeChild(var4);
  502.       }
  503.  
  504.    }
  505.  
  506.    public static void attachChildren(Node var0, Node var1) {
  507.       removeChildren(var1);
  508.       Document var2 = var1.getOwnerDocument();
  509.       NamedNodeMap var3 = var0.getAttributes();
  510.  
  511.       for(int var4 = 0; var4 < var3.getLength(); ++var4) {
  512.          Node var5 = cloneNodeToDoc(var3.item(var4), var2);
  513.          if (var1 instanceof Element) {
  514.             ((Element)var1).setAttributeNode((Attr)var5);
  515.          }
  516.       }
  517.  
  518.       for(Node var6 = var0.getFirstChild(); var6 != null; var6 = var6.getNextSibling()) {
  519.          var1.appendChild(cloneNodeToDoc(var6, var2));
  520.       }
  521.  
  522.    }
  523.  
  524.    public static Node cloneNodeToDoc(Node var0, Document var1) {
  525.       try {
  526.          switch (var0.getNodeType()) {
  527.             case 1:
  528.                Element var10 = var1.createElement(var0.getNodeName());
  529.                NamedNodeMap var11 = var0.getAttributes();
  530.  
  531.                for(int var12 = 0; var12 < var11.getLength(); ++var12) {
  532.                   var10.setAttributeNode((Attr)cloneNodeToDoc(var11.item(var12), var1));
  533.                }
  534.  
  535.                for(Node var13 = var0.getFirstChild(); var13 != null; var13 = var13.getNextSibling()) {
  536.                   var10.appendChild(cloneNodeToDoc(var13, var1));
  537.                }
  538.  
  539.                return var10;
  540.             case 2:
  541.                Attr var15 = var1.createAttribute(var0.getNodeName());
  542.                var15.setValue(var0.getNodeValue());
  543.                return var15;
  544.             case 3:
  545.                Text var2 = var1.createTextNode(var0.getNodeValue());
  546.                return var2;
  547.             case 4:
  548.                CDATASection var3 = var1.createCDATASection(var0.getNodeValue());
  549.                return var3;
  550.             case 5:
  551.                EntityReference var4 = var1.createEntityReference(var0.getNodeName());
  552.                return var4;
  553.             case 6:
  554.             default:
  555.                Object var8 = null;
  556.                return (Node)var8;
  557.             case 7:
  558.                ProcessingInstruction var14 = (ProcessingInstruction)var0;
  559.                ProcessingInstruction var16 = var1.createProcessingInstruction(var14.getTarget(), var14.getData());
  560.                return var16;
  561.             case 8:
  562.                Comment var5 = var1.createComment(var0.getNodeValue());
  563.                return var5;
  564.             case 9:
  565.                Debug.assert(false, "Can't clone doc node");
  566.                Object var7 = null;
  567.                return (Node)var7;
  568.             case 10:
  569.                Debug.assert(false, "Can't clone doc type node");
  570.                Object var6 = null;
  571.                return (Node)var6;
  572.          }
  573.       } catch (RuntimeException var9) {
  574.          throw var9;
  575.       }
  576.    }
  577.  
  578.    public static boolean isAttrPathToken(String var0) {
  579.       return var0.startsWith("@");
  580.    }
  581.  
  582.    public static boolean isTextPathToken(String var0) {
  583.       return var0.equals("#text");
  584.    }
  585.  
  586.    public static String headTokenOf(String var0) {
  587.       int var1 = var0.indexOf("/");
  588.       return var1 == -1 ? var0 : var0.substring(0, var1);
  589.    }
  590.  
  591.    public static String tailPathOf(String var0) {
  592.       int var1 = var0.indexOf("/");
  593.       return var1 == -1 ? "" : var0.substring(var1 + 1);
  594.    }
  595.  
  596.    public static Node setNodeName(Node var0, Node var1, String var2) {
  597.       Document var3 = var1.getOwnerDocument();
  598.       switch (var1.getNodeType()) {
  599.          case 1:
  600.             Element var10 = var3.createElement(var2);
  601.             NamedNodeMap var11 = var1.getAttributes();
  602.  
  603.             for(int var6 = 0; var6 < var11.getLength(); ++var6) {
  604.                Attr var7 = (Attr)var11.item(var6);
  605.                ((Element)var1).removeAttributeNode(var7);
  606.                var10.setAttribute(var7.getNodeName(), var7.getNodeValue());
  607.             }
  608.  
  609.             Node var8;
  610.             for(Node var12 = var1.getFirstChild(); var12 != null; var12 = var8) {
  611.                var8 = var12.getNextSibling();
  612.                var1.removeChild(var12);
  613.                var10.appendChild(var12);
  614.             }
  615.  
  616.             if (var0 != null) {
  617.                Node var9 = var1.getNextSibling();
  618.                var0.removeChild(var1);
  619.                var0.insertBefore(var10, var9);
  620.             }
  621.  
  622.             return var10;
  623.          case 2:
  624.             Element var4 = (Element)var0;
  625.             if (var4.getAttributeNode(var2) != null) {
  626.                return null;
  627.             }
  628.  
  629.             var4.removeAttributeNode((Attr)var1);
  630.             var4.setAttribute(var2, var1.getNodeValue());
  631.             Attr var5 = var4.getAttributeNode(var2);
  632.             return var5;
  633.          default:
  634.             return null;
  635.       }
  636.    }
  637.  
  638.    public static String getNamespacePrefix(String var0, Node var1) {
  639.       for(; var1 != null; var1 = var1.getParentNode()) {
  640.          NamedNodeMap var2 = var1.getAttributes();
  641.          if (var2 != null) {
  642.             for(int var3 = 0; var3 < var2.getLength(); ++var3) {
  643.                Node var4 = var2.item(var3);
  644.                String var5 = var4.getNodeName();
  645.                if (var5.startsWith("xmlns") && var0.equals(var4.getNodeValue())) {
  646.                   if (var5.equals("xmlns")) {
  647.                      return "";
  648.                   }
  649.  
  650.                   if (var5.startsWith("xmlns:")) {
  651.                      return var5.substring(6);
  652.                   }
  653.                }
  654.             }
  655.          }
  656.       }
  657.  
  658.       return null;
  659.    }
  660.  
  661.    public static String getNamePrefix(String var0) {
  662.       int var1 = var0.indexOf(":");
  663.       return var1 == -1 ? "" : var0.substring(0, var1);
  664.    }
  665.  
  666.    public static String getNamePrefix(Node var0) {
  667.       return getNamePrefix(var0.getNodeName());
  668.    }
  669.  
  670.    public static String getPrefixDeclaredNamespace(Node var0, String var1) {
  671.       for(String var2 = String.valueOf("xmlns").concat(String.valueOf(var1.equals("") ? "" : String.valueOf(":").concat(String.valueOf(var1)))); var0 != null; var0 = var0.getParentNode()) {
  672.          NamedNodeMap var3 = var0.getAttributes();
  673.          if (var3 != null) {
  674.             Node var4 = var3.getNamedItem(var2);
  675.             if (var4 != null) {
  676.                return var4.getNodeValue();
  677.             }
  678.          }
  679.       }
  680.  
  681.       return null;
  682.    }
  683.  
  684.    public static String getNameDeclaredNamespace(Node var0, String var1) {
  685.       String var2 = getNamePrefix(var1);
  686.       return getPrefixDeclaredNamespace(var0, var2);
  687.    }
  688.  
  689.    public static String getNodeDeclaredNamespace(Node var0, Node var1) {
  690.       Node var2 = var1 == null ? var0 : var1;
  691.       return getNameDeclaredNamespace(var0, getName(var2));
  692.    }
  693.  
  694.    public static String getNodeNamespace(Node var0, Node var1, String var2) {
  695.       String var3 = getNodeDeclaredNamespace(var0, var1);
  696.       if (var3 == null) {
  697.          var3 = var2;
  698.       }
  699.  
  700.       return var3;
  701.    }
  702.  
  703.    public static String getNamespace(String var0, Node var1) {
  704.       if (var1 == null) {
  705.          return null;
  706.       } else {
  707.          NamedNodeMap var2 = var1.getAttributes();
  708.  
  709.          for(int var3 = 0; var3 < var2.getLength(); ++var3) {
  710.             Node var4 = var2.item(var3);
  711.             String var5 = var4.getNodeName();
  712.             if (var5.startsWith("xmlns")) {
  713.                if (!var5.startsWith("xmlns:")) {
  714.                   if (var0.length() == 0 && var5.length() == 5) {
  715.                      return var4.getNodeValue();
  716.                   }
  717.                } else if (var5.substring(6).equals(var0)) {
  718.                   return var4.getNodeValue();
  719.                }
  720.             }
  721.          }
  722.  
  723.          return getNamespace(var0, var1.getParentNode());
  724.       }
  725.    }
  726.  
  727.    public static String getNameNamespace(Node var0, String var1, String var2) {
  728.       String var3 = getNameDeclaredNamespace(var0, var1);
  729.       if (var3 == null) {
  730.          var3 = var2;
  731.       }
  732.  
  733.       return var3;
  734.    }
  735.  
  736.    public static String getNameFullName(Node var0, String var1, String var2) {
  737.       if (var0 != null && var1 != null) {
  738.          String var3 = var1;
  739.          String var4 = getNameNamespace(var0, var1, var2);
  740.          if (var4 != null && !var4.equals("")) {
  741.             var3 = String.valueOf(String.valueOf(var4).concat(String.valueOf(":"))).concat(String.valueOf(getUnqualifiedName(var1)));
  742.          }
  743.  
  744.          return var3;
  745.       } else {
  746.          return null;
  747.       }
  748.    }
  749.  
  750.    public static String getNodeFullName(Node var0, Node var1, String var2) {
  751.       Node var3 = var1 == null ? var0 : var1;
  752.       return getNameFullName(var0, getName(var3), var2);
  753.    }
  754.  
  755.    public static String getName(Node var0) {
  756.       if (var0 == null) {
  757.          return null;
  758.       } else {
  759.          String var1 = var0.getNodeName();
  760.          return var1;
  761.       }
  762.    }
  763.  
  764.    public static boolean hasNonWhitespaceChildren(Node var0) {
  765.       NodeList var1 = var0.getChildNodes();
  766.  
  767.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  768.          Node var3 = var1.item(var2);
  769.          if (var3.getNodeType() != 3 || !StringUtilities.isWhitespace(var3.getNodeValue())) {
  770.             return true;
  771.          }
  772.       }
  773.  
  774.       return false;
  775.    }
  776.  
  777.    public static String getUnqualifiedName(String var0) {
  778.       if (var0 == null) {
  779.          return null;
  780.       } else {
  781.          var0 = var0.substring(var0.indexOf(":") + 1);
  782.          return var0;
  783.       }
  784.    }
  785.  
  786.    public static String getUnqualifiedName(Node var0) {
  787.       return var0 == null ? null : getUnqualifiedName(var0.getNodeName());
  788.    }
  789.  
  790.    public static XMLTypeRef getXMLTypeRef(Node var0, Node var1, String var2) {
  791.       String var3 = null;
  792.       if (var1 != null && var1.getNodeName().indexOf(":") != -1) {
  793.          var3 = getNodeDeclaredNamespace(var0, var1);
  794.       }
  795.  
  796.       if (var3 == null) {
  797.          var3 = getNodeNamespace(var0, (Node)null, var2);
  798.          return new XMLTypeRef(var3, getUnqualifiedName(var0), var1 == null ? null : var1.getNodeName());
  799.       } else {
  800.          return new XMLTypeRef(var3, (String)null, getUnqualifiedName(var1));
  801.       }
  802.    }
  803.  
  804.    public static SchemaIntf getGoverningSchema(Node var0, Node var1, SchemaSpace var2, URIResolver var3) {
  805.       String var4 = var2.getDefaultNS();
  806.       XMLTypeRef var5 = getXMLTypeRef(var0, var1, var4);
  807.       return var5.getSchema(var2, var3);
  808.    }
  809.  
  810.    public static String getXPath(Node var0) {
  811.       StringBuffer var1 = new StringBuffer();
  812.       buildXPath(var1, var0);
  813.       return var1.toString();
  814.    }
  815.  
  816.    private static void buildXPath(StringBuffer var0, Node var1) {
  817.       Node var2 = var1.getParentNode();
  818.       if (var2 != null) {
  819.          buildXPath(var0, var2);
  820.          var0.append("/");
  821.          var0.append(var1.getNodeName());
  822.       }
  823.    }
  824. }
  825.